package com.dhkj.web.basic;

import com.alibaba.fastjson.JSONObject;
import com.dhkj.web.bean.AddrTree;
import com.dhkj.web.bean.Bmzl;
import com.dhkj.web.bean.Demo;
import com.dhkj.web.bean.OrderProductModel;
import com.dhkj.web.bean.PrintReportModel;
import com.dhkj.web.bean.ProductModel;
import com.dhkj.web.bean.Result;
import com.dhkj.web.bean.ResultScanDinner;
import com.dhkj.web.bean.ScanDinner;
import com.dhkj.web.bean.TangReportTime;
import com.dhkj.web.bean.WXPayCheck;
import com.dhkj.web.bean.Zweekmenubak;


import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;

import io.reactivex.Completable;
import io.reactivex.Observable;
import okhttp3.RequestBody;

import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Headers;
import retrofit2.http.POST;
import retrofit2.http.Query;

public interface ApiUrl {
    //    /**
//     * 有效链接
//     */
//    @GET(Constans.retrofit)
//    Call<Bean> getRetrofit();
//
//    @GET(Constans.retrofit)
//    Observable<BaseResponse<Demo>> getDemo();
//
    @GET("WebAPI/DBService.aspx?method=Select")
    Observable<Demo> runSelect(@Query("userid") String userid, @Query("sql") String sql);

    @GET("WebAPI/DBService.aspx?method=SPSelect")
    Observable<Demo> runSpSelect(@Query("userid") String userid, @Query("sql") String sql);

    @GET("WebAPI/UniformInterface.aspx?method=SubOfflinePay&userid=GZDH2019")
    Observable<Demo> subOfflinePay(@Query("body") String body, @Query("auth_code") String auth_code, @Query("je") String je,
                                   @Query("WXdh") String WXdh, @Query("sub_mch_id") String sub_mch_id, @Query("sub_appid") String sub_appid);

    @GET("WebAPI/UniformInterface.aspx?method=SubWXPayCheck&userid=GZDH2019")
    Observable<WXPayCheck> subWXPayCheck(@Query("WXdh") String WXdh, @Query("sub_mch_id") String sub_mch_id, @Query("sub_appid") String sub_appid);

    @GET("/api/tangshi/scanDinner/getdinner")
    Observable<Result<ResultScanDinner>> getTest(@Query("status") int status, @Query("cardNo") String cardNo, @Query("dinner") String dinner, @Query("pass") String pass);


    @POST("/api/tangshi/scanDinner/lcAction")
    @FormUrlEncoded
    Observable<Result<List<ScanDinner>>> updateStatus(@Field("pkids") String pkids, @Field("dinner") String dinner, @Field("cardNo") String cardNo);


    @GET("/api/depot/getProduct")
    Observable<Result<List<ProductModel>>> getProduct(@Query("posnum") String posnum);


    @GET("tang/info/getAddr")
    Observable<Result<List<AddrTree>>> getAddr(@Query("operaId") String operaId);


    @GET("tang/info/getBmzl")
    Observable<Result<Map<Integer, List<Bmzl>>>> getBmzl();

    @GET("tang/info/getZWeekMenuBak")
    Observable<Result<Map<Integer, List<Zweekmenubak>>>> getZWeekMenuBak();

    @Headers("Accept:application/json")
    @POST("tang/order/toPrePay")
    Observable<Result<Map<String, String>>> toPrePay(@Body RequestBody body);


    @Headers("Accept:application/json")
    @POST("tang/order/toPrePayBatch")
    Observable<Result<Map<String, String>>> toPrePayBatch(@Body RequestBody body);

    @Headers("Accept:application/json")
    @POST("tang/order/preFacePay")
    Observable<Result<Map<String, String>>> preFacePay(@Body RequestBody body);


    @GET("tang/order/microPayBatch")
    Observable<Result<String>> microPayBatch(@Query("orders") String orders, @Query("authCode") String authCode);

    @GET("tang/order/microPay")
    Observable<Result<String>> microPay(@Query("orders") String orders, @Query("authCode") String authCode);

    @Headers("Accept:application/json")
    @POST("tang/order/facePay")
    Observable<Result<String>> facePay(@Body RequestBody body);


    @GET("tang/order/checkOrder")
    Observable<Result<String>> checkOrder(@Query("orders") String orders);

    @GET("tang/order/checkOrderBatch")
    Observable<Result<String>> checkOrderBatch(@Query("orders") String orders);

    @GET("tang/order/checkAliOrderStatus")
    Observable<Result<String>> checkAliOrderStatus(@Query("orders") String orders);

    @Headers("Accept:application/json")
    @POST("tang/order/cashPay")
    Observable<Result<String>> cashPay(@Body RequestBody body);

    @Headers("Accept:application/json")
    @POST("tang/order/cashPayBatch")
    Observable<Result<String>> cashPayBatch(@Body RequestBody body);


    @Headers("Accept:application/json")
    @POST("tang/order/toDepotPrePayBatch")
    Observable<Result<JSONObject>> toDepotPrePayBatch(@Body RequestBody body);

    @Headers("Accept:application/json")
    @POST("api/depot/tuikuoOrder")
    Observable<Result<String>> tuikuoOrder(@Body RequestBody body);


    @Headers("Accept:application/json")
    @POST("tang/order/depotCashPayBatch")
    Observable<Result<String>> depotCashPayBatch(@Body RequestBody body);


    @GET("api/depot/getFk")
    Observable<Result<JSONObject>> getFk(@Query("cardsn") String cardsn);


    @GET("api/depot/order")
    Observable<Result<List<OrderProductModel>>> order(@Query("posnum") String posnum);

    @GET("tang/report/getTime")
    Observable<Result<List<TangReportTime>>> getTime(@Query("operaId") String operaId);


    @POST("tang/report/getReport")
    @FormUrlEncoded
    Observable<Result<PrintReportModel>> getReport(@Field("addr") int addr,
                                                   @Field("timeId") String timeId,
                                                   @Field("date") String date,
                                                   @Field("posnum") String posnum);

    @POST("tang/opera/login")
    @FormUrlEncoded
    Observable<Result<String>> login(@Field("user") String user, @Field("pass") String pass);


    @GET("/tang/report/jiesuan")
    Observable<Result<String>> jiesuan();

    @GET("/tang/report/checkJiesuan")
    Observable<Result<String>> checkJiesuan();


    //
//
//    /**
//     * TODO Get请求
//     */
//    //第一种方式：GET不带参数
//    @GET("retrofit.txt")
//    Observable<BaseResponse<Demo>> getUser();
//    @GET
//    Observable<Demo> getUser(@Url String url);
//    @GET
//    Observable<Demo> getUser1(@Url String url); //简洁方式   直接获取所需数据
//    //第二种方式：GET带参数
//    @GET("api/data/{type}/{count}/{page}")
//    Observable<Demo> getUser(@Path("type") String type, @Path("count") int count, @Path("page") int page);
//    //第三种方式：GET带请求参数：https://api.github.com/users/whatever?client_id=xxxx&client_secret=yyyy
//    @GET("users/whatever")
//    Observable<Demo> getUser(@Query("client_id") String id, @Query("client_secret") String secret);
//    @GET("users/whatever")
//    Observable<Demo> getUser(@QueryMap Map<String, String> info);
//
//    /**
//     * TODO POST请求
//     */
    //第一种方式：@Body
    @Headers("Accept:application/json")
    @POST("WebAPI/UniformInterface.aspx")
    Observable<Demo> postUser(@Body RequestBody body);

//    //第二种方式：@Field
//    @Headers("Accept:application/json")
//    @POST("api/mobile/shop/staff/login")
//    @FormUrlEncoded
//    Observable<Demo> postUser(@Field("username") String username, @Field("password") String password);
//    //多个参数
//    Observable<Demo> postUser(@FieldMap Map<String, String> map);
//
//    /**
//     * TODO DELETE
//     */
//    @DELETE("member_follow_member/{id}")
//    Observable<Demo> delete(@Header("Authorization") String auth, @Path("id") int id);
//
//    /**
//     * TODO PUT
//     */
//    @PUT("member")
//    Observable<Demo> put(@HeaderMap Map<String, String> headers,
//                         @Query("nickname") String nickname);
//
//    /**
//     * TODO 文件上传
//     */
//    @Multipart
//    @POST("upload")
//    Observable<ResponseBody> upload(@Part("description") RequestBody description, @Part MultipartBody.Part file);
//
//    //亲测可用
//    @Multipart
//    @POST("member/avatar")
//    Observable<Demo> uploadImage(@HeaderMap Map<String, String> headers, @Part MultipartBody.Part file);
//
//    /**
//     * 多文件上传
//     */
//    @Multipart
//    @POST("register")
//    Observable<ResponseBody> upload(@PartMap Map<String, RequestBody> params, @Part("description") RequestBody description);
//    //Observable<ResponseBody> upload(@Part() List<MultipartBody.Part> parts);
//
//    @Multipart
//    @POST("member/avatar")
//    Observable<Demo> uploadImage1(@HeaderMap Map<String, String> headers, @Part List<MultipartBody.Part> file);
//
//    /**
//     * 来自https://blog.csdn.net/impure/article/details/79658098
//     * @Streaming 这个注解必须添加，否则文件全部写入内存，文件过大会造成内存溢出
//     */
//    @Streaming
//    @GET
//    Observable<ResponseBody> download(@Header("RANGE") String start, @Url String url);
}
